using System;
using System.Collections.Generic;
using Dyn.News.Models;
using Orchard.ContentManagement;
using Orchard;

namespace Dyn.News.Services {
    public interface IArticleService : IDependency {
        ArticlePart Get(NewsCategoryPart categoryPart, string slug);
        ArticlePart Get(NewsCategoryPart categoryPart, string slug, VersionOptions versionOptions);
        ArticlePart Get(int id);
        ArticlePart Get(int id, VersionOptions versionOptions);
        IEnumerable<ArticlePart> Get(NewsCategoryPart categoryPart);
        IEnumerable<ArticlePart> Get(NewsCategoryPart categoryPart, VersionOptions versionOptions);
        IEnumerable<ArticlePart> Get(NewsCategoryPart categoryPart, ArchiveData archiveData);
        IEnumerable<ArticlePart> Get(NewsCategoryPart categoryPart, int skip, int count);
        IEnumerable<ArticlePart> Get(NewsCategoryPart categoryPart, int skip, int count, VersionOptions versionOptions);
        int PostCount(NewsCategoryPart categoryPart);
        int PostCount(NewsCategoryPart categoryPart, VersionOptions versionOptions);
        IEnumerable<KeyValuePair<ArchiveData, int>> GetArchives(NewsCategoryPart categoryPart);
        void Delete(ArticlePart articlePart);
        void Publish(ArticlePart articlePart);
        void Publish(ArticlePart articlePart, DateTime scheduledPublishUtc);
        void Unpublish(ArticlePart articlePart);
        DateTime? GetScheduledPublishUtc(ArticlePart articlePart);
    }
}